home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
os2
/
sysb091a.zip
/
sysbench
/
src
/
dhry_1.c
next >
Wrap
C/C++ Source or Header
|
1995-12-31
|
15KB
|
508 lines
/*
****************************************************************************
*
* "DHRYSTONE" Benchmark Program
* -----------------------------
*
* Version: C, Version 2.1
*
* File: dhry_1.c (part 2 of 3)
*
* Date: May 25, 1988
*
* Author: Reinhold P. Weicker
*
****************************************************************************
*/
#include "dhry.h"
/* Global Variables: */
Rec_Pointer Ptr_Glob,
Next_Ptr_Glob;
int Int_Glob;
Boolean Bool_Glob;
char Ch_1_Glob,
Ch_2_Glob;
int Arr_1_Glob [50];
int Arr_2_Glob [50] [50];
/*extern char *malloc ();*/
Enumeration Func_1 ();
/* forward declaration necessary since Enumeration may not simply be int */
void Proc_1 (), Proc_2 (), Proc_3 (), Proc_4 (), Proc_5 ();
#ifndef REG
Boolean Reg = false;
#define REG
/* REG becomes defined as empty */
/* i.e. no register variables */
#else
Boolean Reg = true;
#endif
/* variables for time measurement: */
#ifdef TIMES
struct tms time_info;
extern int times ();
/* see library function "times" */
#define Too_Small_Time (2*HZ)
/* Measurements should last at least about 2 seconds */
#endif
#ifdef TIME
extern long time();
/* see library function "time" */
#define Too_Small_Time 2
/* Measurements should last at least 2 seconds */
#endif
#ifdef CLOCK
extern clock_t clock();
#define Too_Small_Time (2*HZ)
#define DURATION 5
#endif
#ifdef OS2TMR
extern long start_alarm(long), start_timer(void *), stop_timer(void*, long);
char Run_Time[8];
#ifdef HZ
#undef HZ
#endif
#define HZ 1000
#define Too_Small_Time (2*HZ)
#define DURATION 5
#define main dhry_main
#endif
#ifdef DURATION
#include <signal.h>
#endif
unsigned long Number_Of_Runs;
long User_Time;
unsigned long Microseconds,
Totalseconds,
Dhrystones_Per_Second;
/* end of variables for time measurement */
long dhry_stone(void)
{
One_Fifty Int_1_Loc;
REG One_Fifty Int_2_Loc;
One_Fifty Int_3_Loc;
REG char Ch_Index;
Enumeration Enum_Loc;
Str_30 Str_1_Loc;
Str_30 Str_2_Loc;
REG unsigned long Run_Index;
long Begin_Time, End_Time;
/* Initializations */
Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
Ptr_Glob->Discr = Ident_1;
Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
Ptr_Glob->variant.var_1.Int_Comp = 40;
strcpy (Ptr_Glob->variant.var_1.Str_Comp,
"DHRYSTONE PROGRAM, SOME STRING");
strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
Arr_2_Glob [8][7] = 10;
/* Was missing in published program. Without this statement, */
/* Arr_2_Glob [8][7] would have an undefined value. */
/* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */
/* overflow may occur for this array element. */
/***************/
/* Start timer */
/***************/
#ifdef TIMES
times (&time_info);
Begin_Time = (long) time_info.tms_utime;
#endif
#ifdef TIME
Begin_Time = time ( (long *) 0);
#endif
#ifdef CLOCK
Begin_Time = clock();
#endif
#ifdef OS2TMR
Begin_Time = 0;
start_timer(&Run_Time);
#endif
for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
{
Proc_5();
Proc_4();
/* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
Int_1_Loc = 2;
Int_2_Loc = 3;
strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
Enum_Loc = Ident_2;
Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
/* Bool_Glob == 1 */
while (Int_1_Loc < Int_2_Loc) /* loop body executed once */
{
Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
/* Int_3_Loc == 7 */
Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
/* Int_3_Loc == 7 */
Int_1_Loc += 1;
} /* while */
/* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
/* Int_Glob == 5 */
Proc_1 (Ptr_Glob);
for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
/* loop body executed twice */
{
if (Enum_Loc == Func_1 (Ch_Index, 'C'))
/* then, not executed */
{
Proc_6 (Ident_1, &Enum_Loc);
strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
Int_2_Loc = Run_Index;
Int_Glob = Run_Index;
}
}
/* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
Int_2_Loc = Int_2_Loc * Int_1_Loc;
Int_1_Loc = Int_2_Loc / Int_3_Loc;
Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
/* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
Proc_2 (&Int_1_Loc);
/* Int_1_Loc == 5 */
} /* loop "for Run_Index" */
/**************/
/* Stop timer */
/**************/
#ifdef TIMES
times (&time_info);
End_Time = (long) time_info.tms_utime;
#endif
#ifdef TIME
End_Time = time ( (long *) 0);
#endif
#ifdef CLOCK
End_Time = clock();
#endif
#ifdef OS2TMR
End_Time = stop_timer(&Run_Time, HZ);
#endif
#ifdef DURATION
Number_Of_Runs = Run_Index - 1;
#endif
if (Int_Glob != 5)
return 0;
if (Bool_Glob != 1)
return 0;
if (Ch_1_Glob != 'A')
return 0;
if (Ch_2_Glob != 'B')
return 0;
if (Arr_1_Glob[8] != 7)
return 0;
if (Arr_2_Glob[8][7] != Number_Of_Runs + 10)
return 0;
if (Ptr_Glob->Discr != 0)
return 0;
if (Ptr_Glob->variant.var_1.Enum_Comp != 2)
return 0;
if (Ptr_Glob->variant.var_1.Int_Comp != 17)
return 0;
if (strcmp(Ptr_Glob->variant.var_1.Str_Comp,
"DHRYSTONE PROGRAM, SOME STRING") != 0)
return 0;
if (Next_Ptr_Glob->Discr != 0)
return 0;
if (Next_Ptr_Glob->variant.var_1.Enum_Comp != 1)
return 0;
if (Next_Ptr_Glob->variant.var_1.Int_Comp != 18)
return 0;
if (strcmp(Next_Ptr_Glob->variant.var_1.Str_Comp,
"DHRYSTONE PROGRAM, SOME STRING") != 0)
return 0;
if (Int_1_Loc != 5)
return 0;
if (Int_2_Loc != 13)
return 0;
if (Int_3_Loc != 7)
return 0;
if (Enum_Loc != 1)
return 0;
if (strcmp(Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING") != 0)
return 0;
if (strcmp(Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING") != 0)
return 0;
return End_Time - Begin_Time;
}
void alarm_handler(int sig)
{
Number_Of_Runs = 0;
}
void main (argc, argv)
int argc;
char **argv;
/*****/
/* main program, corresponds to procedures */
/* Main and Proc_0 in the Ada version */
{
printf ("\n");
printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n");
printf ("\n");
if (Reg)
{
printf ("Program compiled with 'register' attribute\n");
printf ("\n");
}
else
{
printf ("Program compiled without 'register' attribute\n");
printf ("\n");
}
if ( argc == 1 )
{
#ifdef DURATION
printf ("Execution starts, runs through Dhrystone for %d seconds\n", DURATION);
Number_Of_Runs = -1;
#ifdef OS2TMR
start_alarm(DURATION);
#else
signal(SIGALRM, alarm_handler);
alarm(DURATION);
#endif
#else
printf ("Please give the number of runs through the benchmark: ");
{
unsigned long n;
scanf ("%lu", &n);
Number_Of_Runs = n;
}
printf ("\n");
printf ("Execution starts, %lu runs through Dhrystone\n", Number_Of_Runs);
#endif
}
else
{
extern long atol();
Number_Of_Runs = atol(argv[1]);
printf ("Execution starts, %lu runs through Dhrystone\n", Number_Of_Runs);
}
User_Time = dhry_stone();
if (User_Time == 0)
{
printf ("Data consistency error\n");
exit(1)